{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "import skgeom as sg\n",
    "from skgeom.draw import draw\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.patches import Rectangle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7fae39555c90>]"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "polygon = sg.random_polygon(30, seed=976)\n",
    "points = list(polygon.vertices)\n",
    "plt.plot(\n",
    "    [p.x() for p in points],\n",
    "    [p.y() for p in points],\n",
    "    'r+')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7fae395a8190>]"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "largest = sg.LargestEmptyIsoRectangle(\n",
    "    sg.Point2(-0.5, -0.5), sg.Point2(0.5, 0.5))\n",
    "largest.insert(points)\n",
    "r = largest.largest_empty_iso_rectangle\n",
    "\n",
    "# show area of largest empty rectangle.\n",
    "draw(sg.Polygon([\n",
    "        sg.Point2(r.xmin(),r.ymin()),\n",
    "        sg.Point2(r.xmax(),r.ymin()),\n",
    "        sg.Point2(r.xmax(),r.ymax()),\n",
    "        sg.Point2(r.xmin(),r.ymax())\n",
    "    ]), facecolor='orange')\n",
    "\n",
    "# show boundary points of rectangle.\n",
    "for p in (largest.left, largest.top, largest.right, largest.bottom):\n",
    "    plt.plot(p.x(), p.y(), 'bo')\n",
    "    \n",
    "# show constraining point set.\n",
    "plt.plot(\n",
    "    [p.x() for p in points],\n",
    "    [p.y() for p in points],\n",
    "    'r+')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7fade8f75150>]"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "draw(sg.maximum_area_inscribed_k_gon(points, 15), facecolor='gray')\n",
    "\n",
    "# show constraining point set.\n",
    "plt.plot(\n",
    "    [p.x() for p in points],\n",
    "    [p.y() for p in points],\n",
    "    'r+')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7fae2910ec10>]"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAR0AAAD4CAYAAADRlDL+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO2dd3wU1RbHv5MCSegllARIgARCUwRUFFBBBQUU7ChYEB8+fYgFUQQfCQpPQUBUFAVpUhQBUVCkN0FEQUE6RCCQ0EkgpJc974/NDimbZDeZLdnc7+czn+zO3rn3ZHbmt+eee+4dTURQKBQKZ+HlagMUCkX5QomOQqFwKkp0FAqFU1Gio1AonIoSHYVC4VR8XG1AYdSuXVtCQ0NdbYZCoSgBu3btuigigdY+c1vRCQ0NZefOna42Q6FQlABN02IK+0x1rxQKhVNRoqNQKJyKEh2FQuFUlOgoFAqnokRHoVA4FSU6Co9jwQIIDYUxWhShoeb3CvdBiY7Co1iwAAYPhpgYiGQMMTHm90p43AdD8nQ0TbsH+AjwBr4UkfcLKfcwsBi4UURUEo6iACaTidTUVJKTk0lJScmz5d9n7f3ChebXkJJT45+kpLRj1Cjo39+V/5nCQqlFR9M0b+BT4G4gFvhD07TlInIgX7kqwFBgR2nbVLgGk8lUrBDYIg5FlUlLSyuVjZFAVK73QnsAxsTk/0ThKozwdG4CokXkGICmad8AfYAD+cq9C0wAXjegTUU+srOzSU1NLZUYFHdMaQXBVgICAvJslSpVKvJ97n0jRwYw5lIAUAnhHjQA/AgMbE+kU6xXFIcRohMMnMr1Pha4OXcBTdNuABqKyI+aphUqOpqmDQYGAzRq1MgA09yD3IJQGi+gqGNcIQj2iIGt7/38/PDyKnmosVIlcwwnxdK74nngCy5deoB582bz5JNPGnEaFKXACNHRrOzT10DVNM0L+BB4priKRGQ6MB2gQ4cOxa6jumABjBoFA2OimB0Sxbhx9vfbLYJQWi+gqDLp6en2GVVCjLz5re3z9/dH06x93e6D5fsfNcrcpWrUKJIbbqjNDz+M46mnniI+Pp6XX37ZtUaWc7TSrpGsadotQJSI9Mh5/xaAiLyX874a8A+QlHNIPSAeuL+oYHKHDh2kqAmfllGKlJQNCHeiMRFf3xTuuSeF0FDbBcTVgmCEGFSqVAk/Pz+3FwRXMnnyZIYNGwbA6NGjiYqKUufLgWiatktEOlj9zADR8QGOAHcCccAfwBMisr+Q8puA14sbvSpOdEJDzcOi8BDCd1bdLVsx8ua39l4Jgnswe/ZsnnvuOUwmE0OGDOGjjz4qVVdOUThFiU6pu1cikqVp2hBgNeYh81kisl/TtHeAnSKyvLRtWGNgTBSRjLlmR87fKLpRY8r9NouDEoTyw8CBA6levTr9+vVj6tSpJCQkMHv2bHx9fV1tWrmi1J6Oo7Dd03kSYT4ac4GnCAmBEyecY6OibLJ+/Xr69u1LUlISvXr14ttvvyUgIMDVZnkURXk6Zda3HDcOzNeJ5Vcqi4AA836FoijuvPNONmzYQK1atfjpp5/o0aMHly9fdrVZ5YYyKzr9+8P06VC5si9RQM2amUyfrrJOFbZx44038ssvvxAcHMzWrVvp2rUr586dc7VZ5YIyKzpgFpinn/ZlDDBmTKYSHIVdtGjRgm3bthEeHs7u3bvp3LkzJ1Tf3OGUadEB8PExx8IzMzNdbInCVtxpFnhISAhbt26lbdu2REdH07lzZw4cyJ9MrzCSMi86lpEHJTplA3ecBV6nTh02bdpEly5diIuLo0uXLvz++++uM8jDUaKjcCqjRkFKyhXgnZw96aSkmPe7kmrVqrF69Wp69+5NfHw83bp1Y/369a41ykNRoqNwGleuXOGZmK4I1ZGc6ZeCH4LGwJgo1xoH+Pv789133zFgwACSk5Pp2bMn3333navN8jiU6CgczpUrV3j33XcJDQ1lDJvQAI3bAXJewweVjnPhwgVXmgmYr6e5c+fy0ksvkZGRwSOPPMKsWbNcbZZH4TGik5WV5WJLFPlJTExk7NixNG7cmNGjR3P58mUiIm6jYsWNwKacUu8AFUlO/oqIiAhmzpyJyWQy3pioKJuLenl58dFHHxEVFYXJZGLQoEFMnDjReJvKKyLillv79u3FFiZNmiSAvPrqqzaVVxhAZGSRH1+5ckXGjh0rNWrUEMwzVKRLly6yYcMGERGZP18kJEQkikgJCRGZOPGI3HnnnXnK7t+/31iboUSHffzxx7pdb731lphMJmPt8lAwT4Gyem+7XFwK22wVHctFMWTIkBKcGkWJKOQGLkpsirtZTSaTzJ8/X+rUqSOA+Pr6ysiRIyUlJcWhNtvCvHnzxNvbWwB5/vnnJSsryxibPBiPFp3PPvtMvxgUTiLfDZyYmCjjxo2TmjVr6mLTuXNnWb9+vd2eQXx8vAwePFivp0mTJrJ69eqS2RkZabY1/1aMp2aN5cuXi5+fnwDy6KOPSnp6eslsKid4tOjMmDFDAHn22WdLcGoUNlPIDbylW7c8YtOpUydZt25dqbshW7duldatW+v19uvXT86cOVPyCkvh6VjYvHmzVK1aVQDp3r27JCUllbpOT8WjRWfOnDkCyJNPPlmCU6MoESDvvfee1KpVSxeFW2+9VdauXWtozCMjI0Pef/998ff3F0CqVasmn332mWRnZ5fIZiP4888/JTAwUAC55ZZb5NKlS4bU62l4tOgsWLBA/yVUOJarV6/K+++/L5IjNJYbb82aNQ4NsB47dkx69uypt9mxY0fZs2ePfZWUoEtVGIcPH5ZGjRoJIK1bt5bTp08bVren4NGi8+233wogDz30UAlOjcIWrl69KuPHj5fatWsLIJFOEpvcmEwmWbx4sdSvX18A8fb2ltdff91lXZxTp05JRESEANK4cWOJjo52iR3uikeLzrJlywSQPn36lODUKIoiKSkpj9hYvIzVq1e7bOj48uXLMmTIENE0TQBp1KiRrFixwiW2XLhwQXIeICD16tWz3/vyYDxadH788UcBpGfPniU4NQprJCUlyYQJE/TYBSA333yzrFq1ym3yVHbs2CFt27bV7XvwwQfl1KlTTrcjMTFRunXrJoBUr15dtm3b5nQb3BGPFp3Vq1cLIHfffXcJTo0iN0lJSfLBBx8UEJuff/7ZbcQmN5mZmTJ58mSpVKmSAFK5cmX56KOPnJ5Hk5qaKn379hVA/P395eeff3Zq++6IR4vO+vXrBZA77rijBKdGISKSnJwsEydO1BPzALnppptk5cqVbik2+Tl58qR+0wPSvn172blzp1NtyMzMlIEDB+qJjd98841T23c3PFp0tmzZoueHKOwjOTlZJk2alEdsbrzxxjIjNvn5/vvvpWHDhgKIl5eXDB06VK5cueK09k0mkwwbNkwA0TRNPv/8c6e17W54tOhs375d/2VW2EZycrJMnjxZ6tatq4tNhw4d5KeffiqTYpObq1evymuvvSZeXl4CSHBwsCxdutSpo2z/+9//9PP6v//9r8yf05Lg0aKzc+dOAeSGG24owakpX6SkpFgVmx9//NHjbow///xTbrzxRv3/7N27t5w4ccJp7U+bNk0fYRs2bJjHnd/i8GjR2bNnj56kpbBOSkqKfPjhh1KvXr08cY8VK1Z49M2QlZUlU6dO1acuBAQEyIQJEyQjI8Mp7X/zzTfi4+MjgAwcOFAyMzOd0q474NGic+DAAQEkIiKiBKfGs0lJSZEpU6bkEZt27drJ8uXLPVps8hMXFyePPvqofg6uu+462b59u1Pa/vnnnyUgIEAA6du3r6SmpjqlXVfj0aJz9OhRAaRp06YlODWeSUpKinz00Ud69q6l+/nDDz+UK7HJz8qVKyU0NFQP9P773/+WhIQEh7e7bds2qV69ugDSrVs3SUxMdHibrsajRef48eN6Zmp5JzU1VT7++GMlNkWQnJwsI0aM0Ls9devWlYULFzr8/OzZs0f3OG+88Ua5cOGCQ9tzNR4tOrGxsQJI/fr1S3BqPIPU1FT55JNPJCgoSBebtm3byvfff6/EphD27t0rt956q36+unfv7vD5U9HR0dK4cWMBpEWLFi7JoHYWHi06586dE0Bq165dglNTtrEmNtdff70sW7ZMiY0NZGdny/Tp0/Wuj5+fn4wdO9ahC3TFxcXp6wQ1atRIDh8+7LC2XIlHi058fLy+1kp5IS0tTaZOnSrBwcF5gqPfffddydaaKeecO3dOBgwYoJ/LFi1ayJYtWxzW3qVLl6Rjx44CSGBgoOzatcthbbkKjxadq1ev6sOhnk5aWpp8+umn0qBBgzxis3TpUiU2BrB27VoJDw/Xz+2zzz4rFy9edEhbSUlJ0r17dwGkatWqsnnzZoe04yo8WnTS0tL0+S6eSlpamnz22Wd5xKZNmzZKbBxAamqqjB49WipUqKB32+fOneuQ7mp6ero+lO/n5+eyJTocgUeLTnZ2tj4E6mmkpaXJtGnT9PlEliTIJUuWKLFxMAcPHpQ77rhDP+9du3aVQ4cOGd5OVlaWvhC9t7e3zJ8/3/A2XIFHi46I6PNsPOXRIOnp6fL5558XEJvFixcrsXEiJpNJ5s6dq68FXaFCBRk9erThCX4mk0neeust/bv++OOPDa3fFXi86Fhc4bKe7WkRG8v6u4C0atVKvv32W88TGwPXLHY0Fy9elGeffVb/TsLDw2XdunWGt/PBBx/obURGRpbpEUiPFx3LIk5lNdMzPT1dvvjiizxi07JlS1m0aJHniY0FcLUFdrN582Zp0aKF/h0NGDBAzp07Z2gbX375pe65v/TSS2X2+3e46AD3AIeBaGCElc9fAw4AfwPrgZDi6rRHdCx5Fm7xOBA7fsHT09Nl+vTpEhISUn7ExkIZFB0R83c2duxY/cF7NWrUkBkzZhj6fS1dulT33gcMGOC0CapG4lDRAbyBf4AmQAVgD9AyX5muQEDO6xeARcXVa4/oWJbXPHv2bIlPkmHYcDNlZGTIjBkz9HlAltyQb775xmPiUlYx8ImbriY6Olof8iZnEbl9+/YZVv/atWt1D753797GPV7ZSThadG4BVud6/xbwVhHlbwC2FVevPaJjych1i7TyIkQnIyNDvvzyyzxiExERIV9//bVni401yqinkxuTySQLFy7U1yfy8fGRESNGSHJysiH179ixQ3966m233SaXL182pF5n4GjReRj4Mtf7J4GpRZSfCrxdyGeDgZ3ATnsmcFq6J8eOHSvpOSodxfyCZ2RkyMyZM/V5NxaxWbhwYfkTGwseIDoWEhIS5N///re+aFfjxo0NW5x9//79eub5DTfcYHgMyVE4WnQesSI6nxRSdgDwG1CxuHrt8XTCwsIEkCNHjpTsDBlJrpvJmtg0b95cFixYUH7FxkIZ7FIVx/bt2+W6667Tv+tHH33UkKd/Hj9+XL/Gw8PDnboCYklxi+4VcBdwEKhjS732iI5lRGH//v0lO0NGApKZmSmzZs2SJk2a6Bdgs2bNZP78+UpsPJyMjAyZMGGCvnBX1apVZerUqaX+3s+ePas/5ys4ONg9rvUicLTo+ADHgMa5Asmt8pW5ISfYHG5rvfaITps2bQSQ3bt3l/QcGUJmZqb81aePNG3aVIlNOefEiRPSq1cv/Tq46aab5K+//ipVnQkJCdK5c2cBpFatWvL7778bZK3xOGPIvCdwJEdYRuXsewe4P+f1OuAcsDtnW15cnfaITrt27QSQP/74w7YDDHbtMzMzZc6cOXnEJjw8XObNm1eu1sVV5MVkMsmSJUv0gQ5vb2957bXX5OrVqyWuMzk5WRezypUry/r16w202DgcLjqO2OwRnZtvvlkA+fXXX209IzbXXRSZmZkyd+5cvb8NSFhYmHz11VdKbBQ6V65ckaFDh+pJfw0bNpTvv/++xPVlZGTIE088oU/N+O677wy01hg8XnQsLqfNywOUUnQyMzPlq6++yrMMQlhYmMydO1eJjaJQ/vjjD90rB/NC7SdPnixRXdnZ2TJkyBAB84MFZ86cabC1pcPjRadr164CFD0fxoDENGti07RpU5kzZ44SG4VNZGZmypQpU6Ry5cp6F2ny5Mklun5MJpOMHj1avxYnTpzoAItLhseLjiUz1ObcCDs9naysLJk3b540a9ZMiY3CEE6dOiUPPvigfj3dcMMNJQ4MT5kyRa9n5MiRbjFR1ONFxxJYW758ua1nxKZiWVlZMn/+fGnevLn+pTZp0kRmz56txEZhCCtWrNAn+mqaJkOGDClR5vHcuXPF29tbAHn++eddPlrq8aLTt29fAWwPqBXTpcrKypIFCxbkEZvGjRvLrFmzyuTkO4V7k5SUJK+//rouGvXr15fFixdb91iKuHZ/+OEHqVixogDy2GOPOXSB+eLweNF5+OGHBZBFixbZeWpE5s8XCQkRiSJSGjXKkhdfXCgRERF5xGbmzJlKbBQOZ/fu3fpILCA9e/aU48eP5y1UjJe+adMmqVKligDSo0cPSUpKcpzBReDxovP4448LYPdSj/PniwQEiECWCAhcWyslNDRUvvzySyU2CqeSnZ0t06ZNk2rVqgkg/v7+Mn78+GvXoQ2hgV27dukrL9xyyy0SHx/vYKsLUpToeOEB+Pr6ApCZmWnXcaNGQUoKwNM5ew4CIdSsOYMjR44waNAgvW6Fwhl4eXnx73//m0OHDtGvXz9SU1NJefNNfCtUAE0zF9I08xYVZbWOdu3a8csvv9CwYUO2b9/O7bffzpkzZ5z3TxRDuRadgTFRCBrCAiDHxSGGofGxSmwULqVevXp8/fXXrFq1inlNmqABOZJDQny8OeGjENEBaN68Odu2bSMiIoK9e/fSuXNnjh075gzTi6Vci87skCg0NupfppYjQbNDoow1UKEoIT169GDfvn2MHDlSv84jIiJYuHChOT5SBA0bNmTLli20b9+eY8eO0blzZ/bu3esMs4ukXIvOuHHg47Myz76AAPN+hcJd8Pf3Z9y4cezevZvZjRpx/vx5+vfvT/fu3YmOji7y2MDAQDZs2EDXrl05c+YMt912G9u3b3eS5dYp16LTvz/Uq2cWnSieIiQEpk8371co3I2WLVvy9PHjzJw5k5o1a7Ju3Tpat27Nu+++S3p6eqHHVa1alZUrV9KnTx8uX77MXXfdxerVq51oeV48QnR8fHwAyMrKsuu4mJgYYmP3U6VKFUamz+DECSU4CvfGy8uLZ599lkOHDvHUU0+Rnp7O6NGjadu2LZs3by70OD8/P5YsWcIzzzxDSkoK9913H99++60TLb+GR4hOST2dn3/+GYC7776bChUqGG6XQuEoAgMDmTt3Lhs2bKBZs2YcOnSIO+64g4EDB3Lx4kWrx/j4+DBz5kxeffVVMjMz6devH9OnT3ey5eVcdFauNHetevbsabhNCoUz6Nq1K3///TdRUVFUqFCBOXPmEBERweDBswkJEcZoUYSGwgLzAC1eXl5MmjSJsWPHIiI8//zzvP/++8UGpQ2lsAQeV2/2JAeOGzdOABkxYoTNx6SmpupLSsbFxdl8nELhrhw+fFi6deumJ7jC7TlJr+Yk2Py5s5999pm+mPzrr79u6ERRVHJgQbZs2UJKSgpt27YlKCjIUaYpFE6jWbNmrFu3jlq1vgICgWsxnpQUczJsbl544QUWLFiAj48PEydO5LnnnrM7LloSyq3oqK6VwhPRNI2XLv2DcAFLh0lyMtAGxkQVKP/444+zfPly/P39mTVrFo8++ihpaWkOtVGJjhIdhYdhTnqdZnPS67333svatWupVq0ay5Yto1evXly9etVh9pVL0Tl69ChHjx6lRo0a3HzzzY40TeEoipgCUN4ZNw58fS/k2Vdc0munTp3YvHkzdevWZcOGDbRteycNG14qEIg2Ao8QHXvzdCxD5T169NCPVZQxxoxxtQVuS//+0LWrWXSi6G5z0uv111/P1q1bCQwM5dixP4iN7UIkY4iJgcGDjRMejxAdez0d1bVSeDo1a5pFJ2zek3YlvYaFhVGhwlagFeZVF8xYC0SXlHInOsnJyWzatAlN0+jRo4ejTVMYSVTUtWUdoNglHsozFy6YRScwMNDuY/8VNwNhv02B6JJQ7kRn48aNpKenc+ONN1KnTh1Hm6Ywkqioa8/xgGuvlegUwCI6JbnGzYHozQ5bfaHciY7qWinKA6XxdMaNg4oV804LMnL1hXIlOiKiRMdTiIx0tQVui4jo869KIjr9+8Pbb5tFJ4p6hq++UK5E5+DBg8TExBAYGEj79u2dYZrCUaguVaFcuXKFzMxMqlSpQsWKFUtUR9++ZtFZ0qqW4asvlCvRsXg59957L15eHvGvKxQFKE3XyoJl1YWMjAxDbMqNR9x5tubpqK6Vojxw/vx5QImOQ7HF00lMTOSXX37By8uL7t27O8s0hcLpKE/HCdgiOuvWrSMrK4tbb72VGjVqOMs0hcLpKNFxAraIjupaKcoLSnScQHGio4bKFeUJJTpOoDjR2bNnD2fOnCEoKIjrrrvOmaYpFCVmwQIIDcXumd5GiI7lnsrIyDB8KdNyITq5vRzNMm9HoXBjFiwwz+yOicHumd5GiI63tzfe3t6ICNnZ2SWuxxqGiI6mafdomnZY07RoTdNGWPm8oqZpi3I+36FpWqgR7VqwDJnbIjoKhbuSmZnJyZMn+fXXX3nllW9JSfkQGKZ/butMbyNEBxzXxSr1YjKapnkDnwJ3A7HAH5qmLReRA7mKDQISRCRM07R+wHjgsdK2bcHi6VjL04mPj2f79u34+vpy5513GtWkQmEXKSkpxMXFERcXR2xsrL7lfn/u3Dm9KxMJROU6XnKmX46Jyf9JQYwUndTUVDIyMggICDBngRuQCW7EClY3AdEicgxA07RvgD5AbtHpw7UztQSYqmmaJgZ1FovqXq1ZswaTycQdd9xB1apVjWhOodARERITEwsVEsv7+Pj4YuvSNI2goCAaNGjAe7tNjMnYaW4D0MgCvAkJMQtSUfY4zNMZM8ZtRCcYOJXrfSyQfw1QvYyIZGmadgWoBeR5KpimaYOBwQCNGjWy2YCiREd1rRQlxWQycfHixQJCkl9UkpOTi63L19eX4OBgGjRooG/539erVw8fHx/Onz/P9dd35uxZgNsxP9XB26aZ3klJSaSnp+Pv70+lSpVK9f/nDiYbiRGiYy0ym9+DsaUMIjIdmA7QoUMHm72gwkTHZDLpS5Mq0VHkJisri7NnzxbqoVi6QrbccJUqVbIqJLlf165d26b5flevXqVnz56cPXuUkJC2mEw/MObUh4SEmAWnuImXRnk5YPZ0IoEGDRte22kZiImMLLHXY4ToxAK5rKIBcLqQMrGapvkA1YDi/U0bsQSSs7OzERF9hGrnzp1cvHiR0NBQIiIijGpO4eakpaUVGz85e/YsJpOp2Lpq1qxZpIcSHBxMtWrVDBkVTU9P54EHHmDXrl00bdqUbdtWUbduNSCqyC5VbowWnTFAv4MHzfePpl1bQK0UGCE6fwDhmqY1BuKAfsAT+cosB54GtgMPAxuMiueAuS/s4+NDVlYWmZmZel9UDZV7HomJiUV2deLi4gp9lnduNE2jXr16Vrs5lvfBwcHmAKoTyM7OZsCAAaxfv5569eqxZs0a6tata3c9RosOuGH3KidGMwRYDXgDs0Rkv6Zp72B+tOhyYCYwT9O0aMweTr/StpsfX1/fIkVH4d6ICJcuXSpUSCyvbXkek4+Pjx6QLcw7qV+/vn6duBoR4T//+Q9LliyhWrVqrFq1iiZNmpSoLoeKjkELpxny/BURWQmszLdvdK7XacAjRrRVGPlzdc6dO8cff/xBxYoV6dq1qyObVhRDdnY2586dKzJ+EhsbS3p6erF1+fv7FxqItbyvU6dOmVovKSoqii+++AI/Pz9WrFjB9ddfX+K6HCo6Bi2c5jEPfcofTF69ejUAXbt2dZqLXB5JT0/n9OnTRY7wnDlzxqas1urVqxcaiLW8r1Gjhkd1ladOnco777yDt7c3ixYtokuXLqWqr1x0r9yF/AmCqmtVepKSkoqNn1gWjCqOOnXqFBs/qVy5soP/I/fi66+/ZujQoQDMmDGD+++/v9R1KtFxIrk9naysLN3Tuffee11plmspJINUREhISCiyqxMbG8uVK1eKbcLb25v69esXmX9Sv379Eq/V66msXr2ap556ChFh/PjxDBw40JB6leg4kdyi89tvv3H58mWaNWtGWFiYiy1zLiaTifPnzxMbG0uHMWOYWru2VQ8lNTW12LoqVqxYbP5J3bp18fb2dsJ/5jns2LGDhx56iKysLIYNG8bw4cMNq1uJjhPJLTqe2rXKyMjgzJkzRY7wnD59Wu9iCvDSSy9Zratq1arFxk9q1arlUfETd+DgwYP06tWL5ORknn76aSZMmGDoOXaY6Bg07wqU6LgNlgmBRY3w5J4QWBgFJwqa2d2nDxf+8x9dUNQ8NOdz6tQpevTowaVLl+jduzczZswwfJTNYaJj0Lwr8EDROXHiBHv27CEgIIDbbrvNxVaZ4ydXrlwpNn6SkJBQbF1eXl5Fxk+Cg4MJDg4GPz/zAbkySNs68p9UFMulS5fo0aMHp06dolOnTixatEi/Zo0iNTWV5ORkfH19DflRsYiOLU/OtQePER1Lns7y5csBuOuuu0oVvFywwLx2ycCYKGaHRFmd92Iymbhw4UKxHootEwIrVKiQZyTHmrBYJgQqyhZJSUn06tWLgwcP0rp1a1asWOGQNI7cXo4RXbYH9uxhJsBzz5l3GDDvCjxIdCy/GitWrABK17WyrNqWkpJIJGOIimnNwIGxLFwYS5Uq10QlLi7Opl+B3BMCCxMVWycE2oV69K7LycjI4OGHH2bHjh2EhoayevVqhz2NxMiuFcDaTp24b9cupkyZwsuvvGLIvCvwQNE5d+4cULqh8lGjzKu0XVu55BEyM2HlyoJla9asWaR30qBBA6pWreqagKx69K5LMZlMPPPMM6xevZrAwEDWrFlDUFCQw9qziE6dOnUMqU+NXhVD7v5x69at7VqPJz8DY6KIZIz+3qLvUdxJ2LxndDEJCgpS2c4Kq4gIr7zyCl9//TVVqmSnrpkAAB7uSURBVFRh1apVhIeHO7RNoz2dPKJjoNfskaJT2lGr2SFRRMVEAccQmuYsBtSJhg2XcXJAlVLVrSgfjBs3jk8++YQKFSrw/fff065dO4e36VDRGTOmmNK2U3ZmxRXBggWwebOv3hny9S2d6IwbB2YHxjLTtyGwDX//njbNclaUb7744gv++9//4uXlxcKFC+nWrZtT2jXiGea5cVT3qsyLjiXom5rqm5OfUpXJk2+1+RlB1ujfH6ZPh5AQGEMkQUEbqVmzAUeObKVnTyU8isJZsmQJL7zwAgDTpk3joYceclrbDvV0DKTMi861oK+le9Wd1FRfmx7VURT9+8OJExApUcTFNeX33zfRoEEDtm41C09SUlLpGlB4HBs2bKB///6ICGPHjmXw4MFObd8m0bFjcEGJTiEMjIlC0BAWASAsQdAYGBNlaDtNmzZl48aNBAcHK+FRFGDXrl306dOHjIwMhg4dysiRI51ug02iY0dsRolOIcwOiULLkR1Afz07JMrwtsLCwti0aRPBwcH88ssv9OrVSwmPgiNHjnDvvfeSlJTE448/zocffuiSFAnVvXIS14K+17DlUR0lJbfwbNmyRQlPOef06dN0796dCxcu0KNHD+bMmeOyVQsLFZ2oKHM2sUUILa+L6Wop0SmE/EHfWrXA3x+iB9j30Hl7CAsLY+PGjQQFBenCY8tUB4VnkZCQQI8ePYiJieHmm29m6dKlLlt3OT09ncTERLy9valevXreD6OizNnEloxiy2slOiXHEvQNmx9FaipcumT/Q+ftJTw8nE2bNinhKaekpKRw3333sW/fPlq0aMFPP/1U6ofblQbLEzCMnE6jRMcGro1kRefseZqUlGOlHskqjPDwcN3j2bx5M71791bCUw7IzMzk0UcfZdu2bTRs2JDVq1dTq1Ytl9pkczzHjsxiJTo2cG0ky5xuLnyF0JRnYjoQGxvrkDabNWvGxo0bqV+/Pps2bVLC4+GYTCYGDRrETz/9RK1atVizZg0Ncz8B00XYLDpqyNxYro1kHQfMzzLWgDHsIiwsjFdffdXmhcTtoVmzZmzatEkXnvvuu48Us8ul8CBEhOHDhzNv3jwqVarEypUr3ebJsUaPXIESHZu4NpIVqu/TtFBuuukR0tPTmTJlCk2aNGHkyJE2LZplD7k9no0bN9K7d28lPB7GhAkTmDx5Mr6+vixbtoybbrrJ1SbpKNFxEblHsqJ4Ay+v6oic4J13BvHXX39x3333kZyczHvvvUfjxo159913DZ3S0Lx5czZu3Ei9evXYuHGj8ng8iJkzZzJixAg0TWPevHncfffdrjYpD2VJdBARt9zat28vpeWDDz4QQK677jrJysoSEZHt27fLXXfdJZhXrJBatWrJBx98ICkpKaVuz8KhQ4ekXr16Aki3bt0kOTnZsLoVzmfZsmXi5eUlgHzyySeuNscqgwcPFkA+/fRTw+rct2+fANKyZUu7j8X8SHGr97bLxaWwzQjRSU1NlUaNGgkgc+bMyfPZxo0b5dZbb9XFp379+jJ16lRJS0srdbsiIgcPHtSF584771TCU0bZvHmzVKxYUQAZPXq0q80plAceeEAA+fbbbw2r88iRIwJIWFiY3ceWW9EREZk3b54A0qBBgwLejMlkkpUrV0q7du108QkJCZGZM2dKZmZmqds+ePCg1K1bVwC56667DPWmFI5n9+7dUrVqVQHkhRdeEJPJ5GqTCqVz584CyMaNGw2r88SJEwJIo0aN7D62XItOdna2tG3bVgB5//33rZYxmUyydOlSadmypS4+4eHhsnDhQsnOzi5V+wcOHFDCUwaJjo7Wv7dHHnlE7567K82bNxdA9u3bZ1idp0+fFkDq1atn97HlWnRERNauXSuAVK1aVS5cuFBouaysLJk/f740bdpUF5/WrVvLsmXLSvUrp4SnbHHmzBlp0qSJ3jU2qsvtSGrWrCmAnDt3zrA6L168KIDUrFnT7mPLveiIiHTv3l0AeeWVV4otm5GRITNmzJCGDRvq4tOhQwdZtWpVicVn//79UqdOHQHk7rvvVsLjply+fFmuv/56AaR9+/aSmJjoapOKJTMzUwDRNM1QjywxMVEAqVy5st3HKtERkb/++ks0TRNfX1/5559/bDomLS1NPv74Y91LAaRLly6yefPmEtmQW3i6d++uhMfNSE1Nldtuu00AadasmZw/f97VJtnEp5+eFUAi8ZeQEJH5842pNy0tTQCpUKGC3ccq0cnhqaeeEkD69etn13HJyckyfvx43YW1iMbvv/9utw379u2TwMBAAaRHjx6Smppqdx0K48nMzJQ+ffoIIEFBQXLixAlXm2QT8+eL+Pn9KeTMHQeRgABjhCc7O1u/3u318JXo5BATE6MPf5ZEMK5cuSJRUVFSpUoV/cvo06eP7Nmzx656lPC4FyaTSZ599lkBpEaNGoYGYx3Jnj17pHLl5wUq5REdEAkJMaYNHx8fASQjI8Ou45To5OKNN94QQO64444Sx2cuXrwob775pvj7++t96X79+smhQ4dsrkMJj/swYsQIAcTf31+2bdvmanOKJD09XRYuXKgPkUdeWx0nzxZFpCHtBQQECCBJSUl2Hecw0QFqAmuBozl/a1gp0xbYDuwH/gYes6VuR4lOQkKC3k366aefSlXXmTNnZOjQoVKhQgUBxMvLSwYOHCjHjx+36fi9e/fqwnPPPfco4XEBkyZNEkC8vb1LfT04kpMnT8rbb7+dJ75YpUoVqVJliMD+nDvZeE+nevXqAkh8fLxdxzlSdCYAI3JejwDGWynTDAjPeR0EnAGqF1e3o0RHRGTy5MkCSKtWrQyJ9p88eVL+9a9/ibe3twDi6+srL774osTFxRV77N69e6V27doCyL333quEx4l89dVX+g08b948V5tTAJPJJGvXrpUHHnhAn4ZhSeOYNm2aJCYmyvz55hhObtExKqYjIvrAx9mzZ+06zpGicxion/O6PnDYhmP2WESoqM2RopOWliahoaECyMyZMw2r9+jRozJgwADRNE0A8fPzk2HDhhU7CvL3338r4XEyP/74o/4j8eGHH7ranDwkJCTIlClT9IQ/QHx8fOSxxx6TLVu2FAgLzJ9v9myiiDR09EpEpEGDBgLIyZMn7TrOkaJzOd/7hGLK3wQcBLwK+XwwsBPYWZLUa3tYuHChPlJh9Lyo/fv3y8MPP6xfMJUrV5a3335bEhISCj0mt/D07NmzTCSklVW2bt2qx+PeeustV5ujs3v3bvnXv/6lx1EACQ4OlnfeeUfOnDnjEpssSZLR0dF2HVcq0QHWAfusbH3sER2LJwR0LK5NcbCnI2IeDmzfvr0AMm7cOIe0sWvXLunZs6d+AVWvXl3GjRsnV69etVp+z549UqtWLSU8DmTv3r16nGLQoEEun0+VlpYmCxYskE6dOunXCTmZ0EuXLjVkDmBpsHhbBw4csOs4l3evgKrAn8AjttbtaNEREVm/fr0ekHNkIti2bduka9eu+gUVGBgokydPtpocmFt4evXqpYTHQI4fPy5BQUECSN++fV16Q8fExMjIkSP1mAk503SGDh0qBw8edJld+WnTpo0Asnv3bruOc6TofJAvkDzBSpkKwHrgFXvqdoboiIjce++9AshLL73k8LbWr18vHTt2zOM6T5s2TdLT0/OU2717txIegzl37pyEh4cLILfffrtL4mbZ2dmyZs0a6dOnT57AcJs2beTzzz8v1AN2JZbegL15bY4UnVo5gnI052/NnP0dgC9zXg8AMoHduba2xdXtLNH5+++/RdM08fHxkaNHjzq8PZPJJD/++KM+8x2Qxo0by5w5c/KMpOUWnt69eyvhKQVXrlzRly9p27atXL582antx8fHy4cffijNmjXTv3NfX195/PHH5ZdffnF5F68obrnlFgFk69atdh3nMNFx5OYs0RERGThwoIB5CQNnkZ2dLYsXL5YWLVroF2JERIQsWrRIX05j9+7dek7Rfffdp4SnBKSlpUm3bt0EkKZNm9o99Fsa/vzzT3nuuef0oDWY13UaO3asywLD9nL77bcLIBs2bLDrOCU6xXDq1Cnx8/MTQH777TentStiXk7jq6++0kcJALn++utl+fLlYjKZ5K+//sojPPm7YorCycrK0kcR69WrZ/NE39KQlpYm8+bN0z0Ey3bXXXfJd9995/LAsL3cfffdAsjq1avtOk6Jjg289dZbAuZZ5K5wdzMyMuSLL77Q8yIAufnmm2Xt2rXy559/KuGxE5PJJM8//7wAUq1aNbsDofZy4sQJeeutt/QMc0u7L7/8sl3TY9yNXr16CSArVqyw6zglOjZw+fJlPYbyww8/OLXt3KSmpsqUKVPyjGrcfvvtMnXqVKlRo4YAcv/99yvhKYb//ve/eoLmli1bHNJGdna2rFq1Su6///48geHrr79epk+fbvd8JXfEsvby0qVL7TpOiY6NfPTRR3psxdVucFJSkrz33nu60IB58XjL6z59+ijhKYSPP/5YyJlP5YgfkPj4eJk0aZKEhYXlCQw/8cQTsm3bNrcODNvLY489JoB8/fXXdh2nRMdG0tPT9djK9OnTnd6+NRISEmT06NFSuXLlPDECQNq37yuNGqU7JP29rGLJNAdk1qxZhta9a9cuGTRoUJ7AcMOGDWXcuHFODVA7kyeffFIAmTt3rl3HKdGxg0WLFumBR3dyjy9cuCDDhw/Pc8Gbt74iDpjoVxZZtWqVvv7L+PHjDakzNTVVvvrqqzz5VWBexO377793uUfsaAYNGiSAzJgxw67jlOjYgclkkhtvvFEAeeedd1xiQ1GcPn1ahgwZIuCr3wAW0QHjljQoa/z222/6nKVhw4aVuotz/PhxefPNN/X5cJbA8CuvvCKHDx82yGr354UXXhCw/yF+SnTsZNOmTULORE13dZsjeVl0pcm1GbV4U1niwIED+uje008/XeLHBmVnZ8vPP/8svXv31lcKsCQUzpgxw608X2fx8ssvC9g/E1+JTgno3bu3APLiiy+61I7CCAmx6ExiufZ0Tp48qacZ9O7d2+5lNUVELl26JBMnTszz6KEKFSrIgAED5Ndff/WowLC9DB8+vETdVSU6JWDfvn3i5eUl3t7ebpln4ejFm8oCFy9elIiICAGkU6dOdi9RsnPnThk4cKCeGArmp1m+9957hj4/qiwzatQoAeTdd9+16zglOiXkueeeE0AefPBBV5tiFUcu3uTuXL16VW666SYB80p6ti6nmZqaKnPnztWPtWw9evSQH374we2f5OlsxowZI4D897//tes4JTolJC4uTh8tcvcFu8sT6enp+sMTQ0NDbVoW9tixY/LGG2/oCaBgXt/otddekyNHjjjB6rLJe++9J4C8+eabdh1XlOh4oSiUoKAghg0bBsDw4cPNKq1wKSaTiaeffpo1a9YQGBjImjVrCAoKKrTszz//TO/evWnatCkTJkzg0qVLtGvXjpkzZxIXF8ekSZMIDw938n9RdqhQoQIAGRkZhtWpRKcYhg8fTmBgIL/++ivff/+9q80p14gIL7/8Mt988w1VqlRh1apVVgXj0qVLTJw4kfDwcHr27MlPP/2Er68vTz75JNu3b2fnzp08++yzBAQEuOC/KFso0XEBVatWJTIyEoARI0aQmZnpYovKL2PHjqXW1KlUqFCB77//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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "draw(sg.maximum_perimeter_inscribed_k_gon(points, 15), facecolor='#00000000', point_color='blue')\n",
    "\n",
    "# show constraining point set.\n",
    "plt.plot(\n",
    "    [p.x() for p in points],\n",
    "    [p.y() for p in points],\n",
    "    'r+')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
